/**
 * 期初库存
 *
 * @author XiongChun
 * @since 2010-11-20
 */
Ext.onReady(function(){
    var deptStore = new Ext.data.Store({
        proxy: new Ext.data.HttpProxy({
            url: 'stock.ered?reqCode=queryDepts'
        }),
        reader: new Ext.data.JsonReader({}, [{
            name: 'value'
        }, {
            name: 'text'
        }]),
        baseParams: { //areacode : '53'
}        ,
        listeners: {
            // 设置远程数据源下拉选择框的初始值
            'load': function(obj){
                //areaCombo.setValue('530101');
            }
        }
    });
    
    deptStore.load(); // 如果mode : 'local',时候才需要手动load();
    var deptCombo = new Ext.form.ComboBox({
        hiddenName: 'school',
        fieldLabel: '入库学校',
        emptyText: '请选择...',
        triggerAction: 'all',
        store: deptStore,
        displayField: 'text',
        valueField: 'value',
        loadingText: '正在加载数据...',
        mode: 'local', // 数据会自动读取,如果设置为local又调用了store.load()则会读取2次；也可以将其设置为local，然后通过store.load()方法来读取
        allowBlank: true,
        forceSelection: false,
        editable: true,
        typeAhead: true,
        plugins: [new QM.plugin.PinyinFilter],
        anchor: '100%'
    
    });
	
	var instockCombo = new Ext.form.ComboBox({
						//hiddenName : 'stocktypes', // 往后台传值字段名
						store : INSTOCKStore, // 引用的代码表数据源和<eRedG4:ext.codeStore
						mode : 'local',
						triggerAction : 'all',
						valueField : 'value',
						displayField : 'text',
						//value : '1', // 初始选中的列表项
						fieldLabel : '单   位',
						emptyText : '请选择...',
						allowBlank : false,
						forceSelection : true, // 选中内容必须为下拉列表的子项
						editable : false, // 选择输入框可编辑
						typeAhead : true, // 输入的时候自动匹配待选项目
						anchor : '100%'
					});		
    var qForm = new Ext.form.FormPanel({
        region: 'north',
        title: '<span class="commoncss">查询条件<span>',
        collapsible: true,
        border: true,
        labelWidth: 50, // 标签宽度
        // frame : true, //是否渲染表单面板背景色
        labelAlign: 'right', // 标签对齐方式
        bodyStyle: 'padding:3 5 0', // 表单元素和表单面板的边距
        buttonAlign: 'center',
        height: 120,
        items: [{
            layout: 'column',
            border: false,
            items: [{
                columnWidth: .25,
                layout: 'form',
                labelWidth: 60, // 标签宽度
                defaultType: 'textfield',
                border: false,
                items: [{
                    fieldLabel: '期初编号',
                    name: 'qcbh',
                    id: 'qcbh',
                    anchor: '100%'
                }]
            }, {
                columnWidth: .25,
                layout: 'form',
                labelWidth: 60, // 标签宽度
                defaultType: 'textfield',
                border: false,
                items: [new Ext.form.ComboBox({
                    hiddenName: 'rkzt',
                    fieldLabel: '入库作废',
                    emptyText: '请选择',
                    triggerAction: 'all',
                    store: new Ext.data.SimpleStore({
                        fields: ['name', 'code'],
                        data: [['入库', '1'], ['未入库', '0']]
                    }),
                    displayField: 'name',
                    valueField: 'code',
                    mode: 'local',
                    forceSelection: false, // 选中内容必须为下拉列表的子项
                    editable: false,
                    typeAhead: true,
                    // value:'0002',
                    resizable: true,
                    anchor: '100%'
                })]
            }, {
                columnWidth: .20,
                layout: 'form',
                labelWidth: 100, // 标签宽度
                defaultType: 'textfield',
                border: false,
                items: [{
                    xtype: 'datefield',
                    fieldLabel: '开始时间', // 标签
                    name: 'datebegin', // name:后台根据此name属性取值 
                    format: 'Y-m-d', //日期格式化
                    value: new Date(),
                    anchor: '100%' // 宽度百分比
                }]
            }, {
                columnWidth: .20,
                layout: 'form',
                labelWidth: 100, // 标签宽度
                defaultType: 'textfield',
                border: false,
                items: [{
                    xtype: 'datefield',
                    fieldLabel: '结束时间', // 标签
                    name: 'dataend', // name:后台根据此name属性取值 
                    format: 'Y-m-d', //日期格式化
                    value: new Date(),
                    anchor: '100%' // 宽度百分比
                }]
            }]
        }],
        buttons: [{
            text: '查询',
            iconCls: 'previewIcon',
            handler: function(){
                Ext.getCmp('id_tbi_rk').disable();
                Ext.getCmp('id_tbi_refu').enable();
                queryOrderDatas();
            }
        }, {
            text: '打印',
            id: 'id_btn_print',
            iconCls: 'printerIcon',
            handler: function(){
                printCatalog1();
            }
        }, {
            text: '重置',
            iconCls: 'tbar_synchronizeIcon',
            handler: function(){
                qForm.getForm().reset();
            }
        }]
    });
    
    // 定义自动当前页行号
    var rownum = new Ext.grid.RowNumberer({
        header: 'NO',
        width: 28
    });
    
    // 定义列模型
    var cm = new Ext.grid.ColumnModel([rownum, {
        header: '期初单号', // 列标题
        dataIndex: 'stockno', // 数据索引:和Store模型对应
        sortable: true
    }, {
        header: '订单号', // 列标题
        dataIndex: 'orderno', // 数据索引:和Store模型对应
        sortable: true// 是否可排序
    }, {
        header: '明细订单号',
        dataIndex: 'detailno',
        sortable: true,
    }, {
        header: '物品编号',
        dataIndex: 'goodno',
        sortable: true
    }, {
        header: '物品名称',
        dataIndex: 'goodname',
        sortable: true
    }, {
        header: '下单数量',
        dataIndex: 'ordernum'
    }, {
        header: '单位',
        dataIndex: 'deptname'
    }, {
        header: '建立时间',
        dataIndex: 'createtime',
        width: 60
    }, {
        header: '操作人员',
        dataIndex: 'username'
    }, {
        header: '入库状态',
        dataIndex: 'stocktypes',
		renderer : INSTOCKRender,
    }]);
    
    /**
     * 数据存储
     */
    var store = new Ext.data.Store({
        // 获取数据的方式
        proxy: new Ext.data.HttpProxy({
            url: 'stock.ered?reqCode=queryPeriod'
        }),
        reader: new Ext.data.JsonReader({
            totalProperty: 'TOTALCOUNT', // 记录总数
            root: 'ROOT' // Json中的列表数据根节点
        }, [{
            name: 'stockno' // Json中的属性Key值
        }, {
            name: 'orderno'
        }, {
            name: 'detailno'
        }, {
            name: 'goodno'
        }, {
            name: 'goodname'
        }, {
            name: 'ordernum'
        }, {
            name: 'orders'
        }, {
            name: 'deptname'
        }, {
            name: 'createtime'
        }, {
            name: 'opernames'
        }, {
            name: 'username'
        }, {
            name: 'stocktypes'
        }])
    });
    
    /**
     * 翻页排序时候的参数传递
     */
    // 翻页排序时带上查询条件
    store.on('beforeload', function(){
        this.baseParams = qForm.getForm().getValues();
    });
    // 每页显示条数下拉选择框
    var pagesize_combo = new Ext.form.ComboBox({
        name: 'pagesize',
        triggerAction: 'all',
        mode: 'local',
        store: new Ext.data.ArrayStore({
            fields: ['value', 'text'],
            data: [[10, '10条/页'], [20, '20条/页'], [50, '50条/页'], [100, '100条/页'], [250, '250条/页'], [500, '500条/页']]
        }),
        valueField: 'value',
        displayField: 'text',
        value: '20',
        editable: false,
        width: 85
    });
    var number = parseInt(pagesize_combo.getValue());
    // 改变每页显示条数reload数据
    pagesize_combo.on("select", function(comboBox){
        bbar.pageSize = parseInt(comboBox.getValue());
        number = parseInt(comboBox.getValue());
        store.reload({
            params: {
                start: 0,
                limit: bbar.pageSize
            }
        });
    });
    
    // 分页工具栏
    var bbar = new Ext.PagingToolbar({
        pageSize: number,
        store: store,
        displayInfo: true,
        displayMsg: '显示{0}条到{1}条,共{2}条',
        plugins: new Ext.ux.ProgressBarPager(), // 分页进度条
        emptyMsg: "没有符合条件的记录",
        items: ['-', '&nbsp;&nbsp;', pagesize_combo]
    });
    
    // 表格工具栏
    var tbar = new Ext.Toolbar({
        items: [{
            text: '入库',
            iconCls: 'addIcon',
            id: 'id_tbi_rk',
            handler: function(){
                updateCatalogItem();
            }
        }, '->', {
            text: '刷新',
            iconCls: 'arrow_refreshIcon',
            id: 'id_tbi_refu',
            disable: true,
            handler: function(){
                store.reload();
            }
        }]
    });
    
    // 表格实例
    var grid = new Ext.grid.GridPanel({
        // 表格面板标题,默认为粗体，我不喜欢粗体，这里设置样式将其格式为正常字体
        title: '<span class="commoncss">厂商信息列表</span>',
        height: 500,
        id: 'id_grid_sfxm',
        autoScroll: true,
        frame: true,
        region: 'center', // 和VIEWPORT布局模型对应，充当center区域布局
        store: store, // 数据存储
        stripeRows: true, // 斑马线
        cm: cm, // 列模型
        tbar: tbar, // 表格工具栏
        bbar: bbar,// 分页工具栏
        viewConfig: { // 不产横向生滚动条, 各列自动扩展自动压缩, 适用于列数比较少的情况
            // forceFit : true
        },
        loadMask: {
            msg: '正在加载表格数据,请稍等...'
        }
    });
    
    // 监听行选中事件
    grid.on('rowclick', function(pGrid, rowIndex, event){
        Ext.getCmp('id_tbi_rk').enable();
        Ext.getCmp('id_tbi_refu').enable();
    });
    
    grid.on('rowdblclick', function(grid, rowIndex, event){
        updateCatalogItems();
    });
    
    /**
     * 查询项目列表
     */
    function queryOrderDatas(){
        var params = qForm.getForm().getValues();
        params.start = 0;
        params.limit = bbar.pageSize;
        store.load({
            params: params
        });
    }
    
    /**
     * 入库操作
     */
    function updateCatalogItem(){
        var record = grid.getSelectionModel().getSelected();
        if (Ext.isEmpty(record)) {
            Ext.Msg.alert('提示:', '请先选中项目');
            return;
        }
        if (record.get('stocktypes') == 1) {
            Ext.Msg.alert('提示:', '已入库，无法操作');
            return;
        }
        //ajax更新数据
        // 提交到后台处理
        Ext.Ajax.request({
            url: 'stock.ered?reqCode=auitPeriod',
            success: function(response){ // 回调函数有1个参数
                var resultArray = Ext.util.JSON.decode(response.responseText);
                Ext.Msg.alert('提示', resultArray['result']);
                store.reload();
            },
            failure: function(response){
                Ext.Msg.alert('提示', '数据操作失败');
            },
            params: {
                // 系列化为Json资料格式传入后台处理
                stockno: record.get('stockno')
            }
        });
    }
    
    // 布局
    // 如果把form作为center区域的话,其Height属性将失效。
    var viewport = new Ext.Viewport({
        layout: 'border',
        items: [qForm, grid]
    });
    
    var updateForm = new Ext.form.FormPanel({
        region: 'north',
        collapsible: true,
        border: true,
        labelWidth: 60, // 标签宽度
        //labelWidth: 60, // 标签宽度
        labelAlign: 'right', // 标签对齐方式
        bodyStyle: 'padding:3 5 0', // 表单元素和表单面板的边距
        buttonAlign: 'center',
        height: 20,
        items: [{
            layout: 'column',
            border: false,
            items: [{
                columnWidth: .30,
                layout: 'form',
                labelWidth: 60, // 标签宽度
                defaultType: 'textfield',
                border: false,
                items: [{
                    fieldLabel: '期初编号',
                    name: 'stockno',
                    id: 'upstockno',
                    maxLength: 30,
                    readOnly: true,
                    emptyText: '单号自动生成',
                    anchor: '100%'
                }, {
                    fieldLabel: '期初数量',
                    name: 'ordernum',
					id:'allnum',
                    readOnly: true,
                    maxLength: 100,
                    anchor: '100%'
                }, deptCombo]
            }, {
                columnWidth: .30,
                layout: 'form',
                //labelWidth: 60, // 标签宽度
                defaultType: 'textfield',
                border: false,
                items: [{
                    fieldLabel: '产品名称', // 标签
                    name: 'goodname', // name:后台根据此name属性取值
                    maxLength: 20, // 可输入的最大文本长度,不区分中英文字符
                    readOnly: true,
                    anchor: '100%'// 宽度百分比
                }, {
                    fieldLabel: '期初学校',
                    name: 'deptname',
                    readOnly: true,
                    anchor: '100%'
                },{
					name : 'instocknum',
					id:'allinstocknum',
                    fieldLabel: '入库数量',
                    maxValue: 100000,
					minValue:1,
                    decimalPrecision: 0,// 小数精度
                    allowBlank: false,
                    xtype: 'numberfield',
                    labelStyle: 'color:blue;',
                    anchor: '100%'
                }]
            }, {
                columnWidth: .30,
                layout: 'form',
                //labelWidth: 60, // 标签宽度
                defaultType: 'textfield',
                border: false,
                items: [instockCombo,{
						name : 'stocktypes',
						id:'instocktypeUpdate',
                    	hidden:true
                }]
            }]
        }]
    });
    
    var updateWindow = new Ext.Window({
        layout: 'fit', // 设置窗口布局模式
        width: 800, // 窗口宽度
        height: 440, // 窗口高度
        closable: false, // 是否可关闭
        collapsible: true, // 是否可收缩
        maximizable: true, // 设置是否可以最大化
        border: false, // 边框线设置
        constrain: true, // 设置窗口是否可以溢出父容器
        animateTarget: Ext.getBody(),
        pageY: 20, // 页面定位Y坐标
        pageX: document.body.clientWidth / 2 - 800 / 2, // 页面定位X坐标
        items: [updateForm], // 嵌入的表单面板
        buttons: [{
            text: '入库',
            iconCls: 'acceptIcon',
            handler: function(){
                updateTheForm();
            }
        }, {
            text: '关闭',
            iconCls: 'deleteIcon',
            handler: function(){
                updateWindow.hide();
            }
        }]
    });
    
    /**
     * 修改项目
     */
    function updateCatalogItems(){
        var record = grid.getSelectionModel().getSelected();
        if (Ext.isEmpty(record)) {
            Ext.Msg.alert('提示:', '请先选中项目');
            return;
        }
        deptCombo.setValue(record.get('orders'));
		instockCombo.setValue(record.get('stocktypes'));
        updateForm.getForm().loadRecord(record);
        updateWindow.show(); // 显示窗口
    }
    
    /**
     * 表单提交(表单自带Ajax提交)
     */
    function updateTheForm(){
        if (!updateForm.getForm().isValid()) 
            return;
		if(Ext.getCmp('allnum').getValue() < Ext.getCmp('allinstocknum').getValue()){
			 Ext.Msg.alert('提示:', '入库数量超出总数');
			return;
		}
		if (Ext.getCmp('allnum').getValue() == 1) {
            Ext.Msg.alert('提示:', '已入库，无法操作');
            return;
        }
		if (Ext.getCmp('instocktypeUpdate').getValue() == 1) {
            Ext.Msg.alert('提示:', '已入库，无法操作');
            return;
        }
		  
        updateForm.form.submit({
            url: 'stock.ered?reqCode=auitPeriod2',
            waitTitle: '提示',
            method: 'POST',
            waitMsg: '正在处理数据,请稍候...',
            success: function(form, action){ // 回调函数有2个参数
                Ext.MessageBox.alert('提示', action.result.msg);
                updateWindow.hide();
                store.reload();
            },
            failure: function(form, action){
                Ext.Msg.alert('提示', '数据保存失败,错误类型:' +
                action.failureType);
            }
        });
    }
    
    /**
     * 打印一
     */
    function printCatalog1(){
        showWaitMsg('正在准备报表数据,请稍等...');
        Ext.Ajax.request({
            url: 'integrateDemo.ered?reqCode=buildReportDataObject',
            success: function(response){
                hideWaitMsg();
                doPrint('hisCatalogReport4App');
            },
            failure: function(response){
                hideWaitMsg();
                Ext.Msg.alert('提示', "准备报表数据对象发生错误,请检查!");
            }
        });
    }
});
